AWS Batch
AWS Batch は、リージョン内の複数のアベイラビリティーゾーン間で実行中のバッチジョブを簡略化するリージョナルサービスです。
https://gyazo.com/8f9f41eaf7e46f40955654776f6ef272
https://gyazo.com/133f9cff9c9697ef755cfec8e45b0bf0
hiroki.iconBatchでコンピューティング環境(minvcpu 0)だけ用意しておいて、使いたい時にJobを登録するという使い方をすれば料金はオンデマンドでインスタンスの面倒をみる必要もないから最強のコンピューティング環境になるな
運用なし
必要なだけのリソースがその場で立ち上がる
いつでもReady
code:terraform
// コンピュート環境用意
// min_vcpus=0でお金かからない
resource "aws_batch_compute_environment" "general_batch" {
compute_environment_name = "general-batch"
compute_resources {
type = "SPOT"
spot_iam_fleet_role = "${aws_iam_role.ec2_spot_fleet_role.arn}"
bid_percentage = "${var.spot_bid_percentage}"
instance_role = "${aws_iam_instance_profile.ecs_instance_role.arn}"
image_id = "${var.image_id}"
tags {
Name = "aws-batch-${local.name}-for-image-${terraform.workspace}"
}
}
service_role = "${aws_iam_role.aws_batch_service_role.arn}"
state = "ENABLED"
type = "MANAGED"
lifecycle {
ignore_changes = [
"compute_resources.0.desired_vcpus",
]
}
}
// ジョブキューの用意
resource "aws_batch_job_queue" "general_batch_queue" {
name = "general-batch-queue"
state = "ENABLED"
priority = 1
}
hiroki.iconJobはawscliなどからやる。ここではコンピューティングreadyにするだけ
必要なロール
バッチクラスターの作成に必要なロール
aws batchサービスロール
aws batchがawsサービスを呼び出せる。
EC2SpotFleetロール
スポットフリートがec2にタグ付を行うため
ECSインスタンスロール
ECSのコンテナに付与されるロール。バッチのプログラムに必要な権限を割り当てる
ジョブ定義でのロール
ジョブロール
コンテナに付与されるロール
実行ロール
ECSエージェントに付与されるロール。ECSのタスク実行ロールに同じ ロググループとかを作れるようにecsTaskExecutionRoleを与えてやる
ログの設定はジョブ定義で行う
https://gyazo.com/29b4528a17f201dbd0d5073bc6cc1319
hiroki.icon上のようなoption項目がある。terraformで使う
ジョブ定義のコンテナプロパティ
ジョブをsubmitする時のプロパティ
依存関係
N_TO_NでジョブIDを指定して前段のジョブが正常終了した時に後続を実行できる